<%@ page language="java" pageEncoding="UTF-8"%>
<jsp:directive.page import="java.text.SimpleDateFormat"/>
<jsp:directive.page import="java.text.DateFormat"/>
<jsp:directive.page import="java.util.Date"/>
<%@ page import="com.wanghua.spring.listeners.singleton.PersonInfo" %>
<%!
	DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
%>
<%
	response.setCharacterEncoding("UTF-8");

	PersonInfo[] persons = {
			new PersonInfo("wangh", "solution", dateFormat.parse("1982-01-01")),
			new PersonInfo("zs", "solution", dateFormat.parse("1984-02-25")),
			new PersonInfo("ls", "solution", dateFormat.parse("1994-09-12")),
	};
	
	String message = "";

	/*
	* session中如果存对象，存的是引用，所以后续修改那个对象，是会反映到session中的。
	*
	* 考虑性能，服务器一般把session放入内存里。session在用户第一次访问服务器时自动创建。需要注意只有访问JSP、Servlet等程序时才会创建session。
	* 访问html、image等静态资源并不会创建。如果尚未生成session，也可以用request.getSession(true)强制生成session。
	* session生成后，只要用户继续访问，服务器就会更新session的最后访问时间，维护该session。
	*
	* 为防止内存溢出，服务器会把长时间没有活跃的session从内存删除，这个时间就是session的超时时间。
	* session的超时时间为 maxInactiveInterval 属性，可以通过对应的 getMaxInactiveInterval() 获取，通过 setMaxInactiveInterval() 修改，单位为秒。
	* 另外，通过session的 invalidate() 方法可以使session失效。
	*
	* Tomcat中session的默认超时时间为20分钟。可以修改 web.xml，改变默认超时时间。单位为：分钟。
	*
	* session的sessionId存于cookie或url中，如果存于cookie，则maxAge属性一般为-1，表示仅当前浏览器内有效，并且各浏览器窗口间不共享。
	* 关闭浏览器会失效。因此同一台机器的两个浏览器窗口访问服务器时，会生成两个不同的session。但浏览器窗口内的链接、脚本等打开的新
	* 窗口除外，这类子窗口会共享父窗口的cookie。
	*
	* 如果浏览器不支持或禁用了cookie怎么办？比如，现在大部分手机浏览器不支持cookie。Java提供了另一种解决方案：URL地址重写。
	* HttpServletResponse类提供了encodeURL(string url)实现URL地址重写。例如：
	* <a href="《%= response.encodeURL('index.jsp')%》"></a>
	* 该方法会自动判断客户端是否支持cookie，如果不支持，会将sessionId写到URL中，结果可能如：
	* <a href="index.jsp;jssessionid=0CCDDDEEEEODFDFDFDFEFEFE32232SSDDFGKLJFGJG"></a>。
	* 如果是页面重定向，那么可以这样写：
	* response.sendRedirect(response.encodeRedirectUrl("index.jsp"));
	* 效果和 encodeURL 一样的。
	*
	* Tomcat判断客户端支持cookie的依据是请求中是否含有cookie。如果客户端支持cookie，但由于第一次请求时不会携带任何cookie，URl地址重写后的地址中
	* 仍然会带有jssessionid。
	*
	* 既然手机浏览器大部分不支持cookie，索性禁止session使用cookie：
	* 在web包下创建一个META-INF文件夹，跟WEB-INF同级。打开 context.xml（没有则创建它）编辑内容如下：<Context path="/" cookies="false"></Context>
	* 或者修改tomcat全局的 conf/context.xml：<Context cookies="false">........</Context>
	* */

	if(request.getMethod().equals("POST")){
		for(PersonInfo person : persons){
			// 如果 用户名正确 且 密码正确
			if(person.getAccount().equalsIgnoreCase(request.getParameter("username"))
					&& person.getPwd().equals(request.getParameter("password"))){
				
				// 登录成功, 设置将用户的信息以及登录时间保存到 Session
				session.setAttribute("person", person);
				session.setAttribute("loginTime", new Date());
				
				response.sendRedirect(request.getContextPath() + "/session/welcome.jsp");
				return;
			}
		}
		
		// 登录失败
		message = "用户名密码不匹配，登录失败。";
	}

%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>请先登录</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div align="center" style="margin:10px; ">
	<fieldset>
		<legend>登录</legend>
		<form action="session.jsp" method="post">
			<table>
				<% if( ! message.equals("")){ %>
				<tr>
					<td>
					</td>
					<td>
						<span><img src="images/errorstate.gif"></span>
						<span style="color:red; "><%= message %></span>
					</td>
				</tr>
				<% } %>
				<tr>
					<td>
						帐号：
					</td>
					<td>
						<input type="text" name="username" style="width:200px; ">
					</td>
				</tr>
				<tr>
					<td>
						密码：
					</td>
					<td>
						<input type="password" name="password" style="width:200px; ">
					</td>
				</tr>
				<tr>
					<td>
					</td>
					<td>
						<input type="submit" value=" 登  录 " class="button">
					</td>
				</tr>
			</table>
		</form>
	</fieldset>
</div>

Hello Kitty, hellokitty

</body>
</html>
